package main

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
	"time"
)

/**
  gorm 持久层学习
todo https://www.liwenzhou.com/posts/Go/gorm/   -----》》》了解一下
*/

func main() {
	mysql1()

}

//todo  结构体UserInfo    ----》  数据库表 user_infos   注意会加一个 s 标识复数
type User struct {
	ID   uint
	Name string
	Age  int
}

//todo 给表设置名字   不设置的话，就会使用结构体名称加 s 作为表名
func (u User) TableName() string {
	return "user"
}

type Person struct {
	gorm.Model
	Name         string
	Age          int
	Birthday     *time.Time
	Email        string  `gorm:"type:varchar(120);unique_index"`
	Role         string  `gorm:"size:255"`        //todo 设置字段大小为255
	MemberNumber *string `gorm:"unique;not null"` //todo 设置会员号 member number 唯一并且不为空
	Num          int     `gorm:"AUTO_INCREMENT"`  // todo 设置num 为自增类型
	Address      string  `gorm:"index:addr"`      // todo 给address字段创建名为addr的索引
	IgnoreMe     int     `gorm:"-"`               // todo 忽略本字段
}

func mysql1() {

	dsn := "root:2868463718@(127.0.0.1)/go-learn?charset=utf8mb4&parseTime=True&loc=Local"

	db, err := gorm.Open("mysql", dsn)
	if err != nil {
		panic(err)
	}

	defer db.Close()

	//创建表 ，自动迁移（把结构体和数据表进行对应）
	db.AutoMigrate(&User{})
	//
	//user := User{1, "张三", 18}
	//
	//db.Create(&user)

	//查询
	var u User

	db.First(&u) //查询表中第一条数据到u

	fmt.Println(u)

	//更新
	db.Model(&u).Update("age", 100)

	fmt.Println(u)
	//删除
	db.Delete(&u)

	//todo 给结构体创建一个表名为uuuu的表
	//db.Table("uuuu").Create(&u)
}

func mysql2() {

}
